'use strict';
const dayjs = require("dayjs");
const getNumberValue = function (value) {
    let numberValue = Number(value);
    return isNaN(numberValue) ? 0 : numberValue;
}
module.exports = app => {
    const { INTEGER, DATE, STRING, TEXT, DECIMAL } = app.Sequelize;
    const OfficeBuildingTemplate = app.model.define(
        'OfficeBuildingTemplate',
        {
            id: { type: INTEGER, primaryKey: true, autoIncrement: true },
            post_url: TEXT,
            image_url: {
                type: TEXT,
                get() {
                    const rawValue = this.getDataValue('image_url');
                    // 判断是否为json数组字符串
                    if (typeof rawValue === 'string' && rawValue.startsWith('[') && rawValue.endsWith(']')) {
                       return  JSON.parse(rawValue)
                    }
                    return [];
                },
                set(value) {
                    this.setDataValue('image_url', Array.isArray(value) ? JSON.stringify(value) : '[]');
                }
            },
            video_url: TEXT,
            // 楼盘名称
            building_name: STRING(100),
            // 发布类型(传统写字楼/联合办公)
            publish_type: STRING(20),
            // 写字楼类型(纯写字楼/商业综合体/商务公寓/商务酒店/产业园区)
            building_type: STRING(20),
            // 租售方式(出租/出售)
            rent_type: STRING(20),
            // 写字楼性质(新房/二手房)
            property_nature: STRING(20),
            // 区域板块ID
            district: JSON,
            // 区域板块
            district_label: STRING(255),
            // 写字楼地址
            address: STRING(200),
            // 经度
            lng: STRING(255),
            // 纬度
            lat: STRING(255),
            // 总楼层
            total_floors: INTEGER,
            // 得房率
            efficiency: DECIMAL(5,2),
            rental_area_min: {
                type: DECIMAL(10,2),
                get() {
                    return getNumberValue(this.getDataValue('rental_area_min'))
                }
            },
            rental_area_max: {
                type: DECIMAL(10,2),
                get() {
                    return getNumberValue(this.getDataValue('rental_area_max'))
                }
            },
            price_type: STRING,
            price_min: {
                type: DECIMAL(10,2),
                get() {
                    return getNumberValue(this.getDataValue('price_min'))
                }
            },
            price_max: {
                type: DECIMAL(10,2),
                get() {
                    return getNumberValue(this.getDataValue('price_max'))
                }
            },
            day_price: {
                type: DECIMAL(10,2),
                get() {
                    return getNumberValue(this.getDataValue('day_price'))
                }
            },
            // 开发商
            developer: STRING(100),
            // 物业公司
            property_company: STRING(100),
            // 物业费
            property_fee: {
                type: DECIMAL(10,2),
                get() {
                    return getNumberValue(this.getDataValue('property_fee'))
                }
            },
            // 空调费
            ac_fee: STRING,
            // 电费
            electricity_fee: {
                type: DECIMAL(10,2),
                get() {
                    return getNumberValue(this.getDataValue('electricity_fee'))
                }
            },
            // 停车费
            parking_fee: {
                type: DECIMAL(10,2),
                get() {
                    return getNumberValue(this.getDataValue('parking_fee'))
                }
            },
            // 配套设施 (多选)
            facilities: STRING,
            // 房源标签 (多选)
            tags: STRING,
            // 地铁信息
            subway_info: TEXT,
            // 公交信息
            bus_info: TEXT,
            // 商超配套
            commercial_facilities: TEXT,
            // 酒店配套
            hotel_facilities: TEXT,
            // 行政配套
            administrative_facilities: TEXT,
            // 项目配套
            project_facilities: TEXT,
            // 创建时间
            create_time: {
                type: DATE,
                get() {
                    return this.getDataValue('create_time') ? dayjs(this.getDataValue('create_time')).format('YYYY-MM-DD HH:mm:ss') : null;
                }
            },
            updated_time: {
                type: DATE,
                get() {
                    return this.getDataValue('updated_time') ? dayjs(this.getDataValue('updated_time')).format('YYYY-MM-DD HH:mm:ss') : null;
                }
            },
        },
        {
            tableName: 'office_building_template',
            timestamps: true,
            createdAt: 'create_time',
            updatedAt: 'updated_time'
        }
    );
    // 关联很多写字楼
    OfficeBuildingTemplate.associate = function () {
        app.model.OfficeBuildingTemplate.hasMany(app.model.OfficeBuilding, { foreignKey: 'template_id', targetKey: 'id', as: 'buildingList' });
    }
    return OfficeBuildingTemplate;
};
